package org.example.utils.common;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;

import java.io.File;
import java.sql.PreparedStatement;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;

/**
 * 文件导入到处的工具类
 */
public class FileTools {

    /**
     * 写Excel文件
     * @param fileName 写入excel的文件名
     * @param cls      写入Excel数据对应的实体类的Class对象
     * @param list     写入的数据集合
     * @param <T>      泛型，一般类型为要写入的实体类
     * @return 写入的条数
     * @throws ParseException
     */
    public static <T> int writeExcel(String fileName, Class<T> cls, List<T> list) throws ParseException {
        File destfile = new File(fileName);//目标文件
        EasyExcel.write(destfile, cls)
                .sheet()
                .doWrite(list);
        return list.size();
    }

    /**
     * 读取excel文件
     *
     * @param file excel文件对象
     * @param cls      读取Excel数据对应的实体类的Class对象
     * @param <T>      泛型，一般类型为要读取数据的实体类
     * @return List集合，集合中加载的是数据的实体类对象
     */
    public static <T> List<T> readExcel(File file, Class<T> cls) {
        List<T> list = new ArrayList<>();//定义要返回的集合
        if (file.exists()) {//判断文件存在
            //读取Excel
            EasyExcel.read(file, cls, new ReadListener<T>() {//读监听器，提供读取excel不同时期的监听方法
                // 读取每行数据监听
                @Override
                public void invoke(T t, AnalysisContext analysisContext) {
                    list.add(t);
                }
                //所有数据读取完毕监听
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                    // System.out.println("数据读取完毕！");
                }
            }).sheet().doRead();
        }
        return list;
    }

    
}
